package br.com.vti.sisp_sicrim.antigo.controller.tela;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe responsavel por encapsular o tratamento e as consistencias da tela Sista001
 * 
 * @author Incode - Data: mai/2014
 * 
 */
public class Sista001 {
	private boolean enviada = false;
	private String pagina = "/resources/antigo/jsp/Sista001.jsp";
	private String versao;
	private String operacao;
	private int dataCorrente;
	private String horaCorrente;
	private String sn;
	private String opera;
	private String mdd;
	private String wfinal;
	private String progr;
	private String descr;
	private int datatu;
	private int dinopeMatfun;
	private String empresa;
	private String nomeClasse;
	private String[][] modul = new String[4][8];
	private String mensagem = "";
	private String funcao = "0";
	private String campofocus = "modul[w][j]";
	private String navegar = "";
	private Boolean temMensagem = false;
	private Result result;
	private Sessao sessao;

	// Classes views
	// Classes includes
	public Sista001() {
		inicializar(false);
	}

	public Sista001(boolean primeiraVez, Sessao sessao) {
		this.sessao = sessao;
		inicializar(primeiraVez);
	}

	public void inicializar(boolean primeiraVez) {
		if (primeiraVez) {
			versao = "0";
			operacao = "";
			dataCorrente = 0;
			sn = "";
			opera = "";
			mdd = "";
			wfinal = "";
			progr = "";
			descr = "";
			modul = new String[4][8];
			datatu = 0;
			dinopeMatfun = 0;
			empresa = "";
			nomeClasse = "";
			empresa = sessao.getSisgsisp().getEmpresa();
			operacao = sessao.getSisgsisp().getOperacao();
			versao = sessao.getSisgsisp().getVersao();
		}
		horaCorrente = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()); // *TIMX
	}

	public boolean receberTela(boolean primeiraVez, Result result) {
		// faz o tratamento das criticas necessarias para os dados da tela
		// recebida
		this.result = result;
		temMensagem = false;
		if (!primeiraVez) {
			return validar();
		} else {
			return true;
		}
	}

	public void enviarTela(boolean primeiraVez, Result result, String origem) {
		this.enviada = true;
		// rotina para enviar a tela
		// caso esteja setado valores para acoesFinais, executa as classes
		// correspondentes
		this.result = result;
		if (UtilBean.acoesFinais != null && !UtilBean.acoesFinais.isEmpty()) {
			UtilBean.processaAcao();
		} else {
			enviar(result, origem);
		}
	}

	public void enviar(Result result, String origem) {
		// redicionar para o jsp correspondente
		UtilBean.redireciona(pagina, result, origem);
	}

	public void enviarMensagem(String campo, String mensagem) {
		// formatar a mensagem de erro, posicionar no campo informa
		if (campo != null) {
			campofocus = campo;
		} else {
			campofocus = "";
		}
		this.mensagem = mensagem;
		temMensagem = true;
		// enviar(result, origem);
	}

	public boolean validar() {
		// validar os campos recebidos da tela
		UtilBean.funcao = this.funcao;
		ValidarDescr();
		if (temMensagem) {
			return false;
		}
		ValidarDinopeMatfun();
		if (temMensagem) {
			return false;
		}
		ValidarFinal();
		if (temMensagem) {
			return false;
		}
		ValidarFuncao();
		if (temMensagem) {
			return false;
		}
		ValidarMdd();
		if (temMensagem) {
			return false;
		}
		ValidarModul();
		if (temMensagem) {
			return false;
		}
		ValidarOpera();
		if (temMensagem) {
			return false;
		}
		ValidarProgr();
		if (temMensagem) {
			return false;
		}
		sessao.getSisgsisp().setEmpresa(this.empresa);
		sessao.getSisgsisp().setOperacao(this.operacao);
		sessao.getSisgsisp().setVersao(this.versao);
		return true;
	}

	private void ValidarFuncao() {
		// Consist�ncia F00funcao
		if (!(UtilBean.funcao.equals(UtilBean.ctt_processa) || UtilBean.funcao.equals(UtilBean.ctt_confirma) || UtilBean.funcao.equals(UtilBean.ctt_retorna) || UtilBean.funcao.equals(UtilBean.ctt_proxima))) {
			enviarMensagem(null, "");
			return;
		}
	}

	private void ValidarOpera() {
		// Consist�ncia F00OPERA
		if (operacao.equals("AOS") && opera.trim().equals("") && sn.equals("N")) {
			enviarMensagem(null, "INFORME A OPERACAO");
			return;
		}
	}

	private void ValidarMdd() {
		// Consist�ncia F00MDD
		// CAMPO MDD ALTERADO PARA COMBOBOX NO JSP
		// if (operacao.equals("AOS") && sn.equals("N")) {
		// if (!(sista001B.getMdd().equals("VEI") ||
		// sista001B.getMdd().equals("CON") || sista001B.getMdd().equals("MUL")
		// || sista001B.getMdd().equals("ARR") ||
		// sista001B.getMdd().equals("IPV") || sista001B.getMdd().equals("ROU")
		// || sista001B.getMdd().equals("PMM") ||
		// sista001B.getMdd().equals("VIS") || sista001B.getMdd().equals("TAB")
		// || sista001B.getMdd().equals("CRI") ||
		// sista001B.getMdd().equals("IDC") || sista001B.getMdd().equals("REN")
		// || sista001B.getMdd().equals("FUN") ||
		// sista001B.getMdd().equals("SEN") || sista001B.getMdd().equals("RCH")
		// || sista001B.getMdd().equals("RFR") ||
		// sista001B.getMdd().equals("BAT") || sista001B.getMdd().equals("SUP")
		// || sista001B.getMdd().equals("CCM") ||
		// sista001B.getMdd().equals("PRF"))) {
		// enviarReceberTela(false, result);
		// if (!(sista001B.getMdd().equals("VEI") ||
		// sista001B.getMdd().equals("CON") || sista001B.getMdd().equals("MUL")
		// || sista001B.getMdd().equals("ARR") ||
		// sista001B.getMdd().equals("IPV") || sista001B.getMdd().equals("ROU")
		// || sista001B.getMdd().equals("PMM") ||
		// sista001B.getMdd().equals("VIS") || sista001B.getMdd().equals("TAB")
		// || sista001B.getMdd().equals("CRI") ||
		// sista001B.getMdd().equals("IDC") || sista001B.getMdd().equals("REN")
		// || sista001B.getMdd().equals("FUN") ||
		// sista001B.getMdd().equals("SEN") || sista001B.getMdd().equals("RCH")
		// || sista001B.getMdd().equals("RFR") ||
		// sista001B.getMdd().equals("BAT") || sista001B.getMdd().equals("SUP")
		// || sista001B.getMdd().equals("CCM") ||
		// sista001B.getMdd().equals("PRF"))) {
		// enviarMensagem(null, "MODULO INEXISTENTE");
		// return;
		// }
		// // INPUT 192
		// receberTela(false, result);
		// }
		// }
	}

	private void ValidarFinal() {
		// Consist�ncia F00FINAL
		// CAMPO FINAL ALTERADO PARA COMBOBOX NO JSP
		// if (getOperacao().equals("AOS") && getSn().equals("N") && !sista001D.getFinal().equals("A") || sista001D.getFinal().equals("E") || sista001D.getFinal().equals("C")) {
		// enviarReceberTela(false, result);
		// if (!(sista001D.getFinal().equals("A") || sista001D.getFinal().equals("E") || sista001D.getFinal().equals("C"))) {
		// enviarMensagem(null, "FINALIDADE INVALIDA");
		// return;
		// }
		// receberTela(false, result);
		// }
	}

	private void ValidarProgr() {
		// Consist�ncia F00PROGR
		if (operacao.equals("AOS") && progr.trim().equals("") && sn.equals("S")) {
			enviarMensagem(null, "INFORME O NOME DO PROGRAMA");
			return;
		}
	}

	private void ValidarDescr() {
		// Consist�ncia F00DESCR
		if (operacao.equals("AOS") && descr.trim().equals("") && sn.equals("S")) {
			enviarMensagem(null, "INFORME A DESCRICAO");
			return;
		}
	}

	private void ValidarModul() {
		// Consist�ncia F00MODUL
		int j;
		int w;
		if (operacao.equals("AOS") && sn.equals("S")) {
			for (j = 1; j <= 7; j++) {
				for (w = 1; w <= 3; w++) {
					if (!(getModul(w, j).equals("S") || getModul(w, j).equals("N"))) {
						enviarMensagem(null, "INFORME SIM �S� OU NAO �N�");
						return;
					}
				}
			}
		}
	}

	private void ValidarDinopeMatfun() {
		// Consist�ncia D01VW-DVEOPE.DINOPE-MATFUN
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getOperacao() {
		return operacao;
	}

	public void setOperacao(String operacao) {
		this.operacao = operacao;
	}

	public int getDataCorrente() {
		return dataCorrente;
	}

	public void setDataCorrente(int dataCorrente) {
		this.dataCorrente = dataCorrente;
	}

	public String getSn() {
		return sn;
	}

	public void setSn(String sn) {
		this.sn = sn;
	}

	public String getOpera() {
		return opera;
	}

	public void setOpera(String opera) {
		this.opera = opera;
	}

	public String getMdd() {
		return mdd;
	}

	public void setMdd(String mdd) {
		this.mdd = mdd;
	}

	public String getWfinal() {
		return wfinal;
	}

	public void setWfinal(String wfinal) {
		this.wfinal = wfinal;
	}

	public String getProgr() {
		return progr;
	}

	public void setProgr(String progr) {
		this.progr = progr;
	}

	public String getDescr() {
		return descr;
	}

	public void setDescr(String descr) {
		this.descr = descr;
	}

	public int getDatatu() {
		return datatu;
	}

	public void setDatatu(int datatu) {
		this.datatu = datatu;
	}

	public int getDinopematfun() {
		return dinopeMatfun;
	}

	public void setDinopematfun(int dinopeMatfun) {
		this.dinopeMatfun = dinopeMatfun;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getNomeClasse() {
		return nomeClasse;
	}

	public void setNomeClasse(String nomeClasse) {
		this.nomeClasse = nomeClasse;
	}

	public String[][] getModul() {
		return modul;
	}

	public void setModul(String[][] modul) {
		this.modul = modul;
	}

	public String getModul(int index1, int index2) {
		return modul[index1][index2];
	}

	public void setModul(int index1, int index2, String modul) {
		this.modul[index1][index2] = modul;
	}

	public String getHoraCorrente() {
		return horaCorrente;
	}

	public void setHoraCorrente(String horaCorrente) {
		this.horaCorrente = horaCorrente;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public String getCampofocus() {
		return campofocus;
	}

	public void setCampofocus(String campofocus) {
		this.campofocus = campofocus;
	}

	public String getNavegar() {
		return navegar;
	}

	public void setNavegar(String navegar) {
		this.navegar = navegar;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public void setMensagemSaida(String mensagem) {
		this.mensagem = mensagem;
	}

	public boolean getEnviada() {
		return this.enviada;
	}

	public void setSessao(Sessao sessao) {
		this.sessao = sessao;
	}
}
